Jeg har rodet med JSON i nogen tid, bare skubbet det ud som tekst, og det har ikke skadet nogen (som jeg kender til), men jeg vil gerne begynde at gøre tingene ordentligt. Jeg har set så mange påståede "standarder" for JSON-indholdstypen: ansøgning / json ansøgning / x-javascript tekst / javascript tekst / x-javascript tekst / x-json Men hvilken er korrekt eller bedst? Jeg finder ud af, at der er sikkerhedsproblemer og browsersupport, der varierer mellem dem. Jeg ved, at der er et lignende spørgsmål, hvilken MIME-type, hvis JSON returneres af en REST API ?, men jeg vil gerne have et lidt mere målrettet svar.
2020-12-07 21:15:43
1 2 Næste For JSON-tekst: ansøgning / json MIME-medietypen til JSON-tekst er application / json. Standardkodningen er UTF-8. (Kilde: RFC 4627). For JSONP (kører JavaScript) med tilbagekald: ansøgning / javascript Her er nogle blogindlæg, der blev nævnt i de relevante kommentarer: Hvorfor skal du ikke bruge tekst / html til JSON Internet Explorer har undertiden problemer med applikation / json En ret komplet liste over Mimetyper og hvad man skal bruge dem til Den officielle mime-typeliste på IANA fra @ gnrfans svar nedenfor | IANA har registreret den officielle MIME-type til JSON som applikation / json. Når man bliver spurgt om hvorfor ikke tekst / json, synes Crockford at have sagt, at JSON ikke rigtig er JavaScript eller tekst, og også IANA var mere tilbøjelige til at uddele applikation / * end tekst / *. Flere ressourcer: Medietyper Anmodning om kommentarer 4627 bluesmoon: JSON har en type | For JSON: Indholdstype: applikation / json For JSON-P: Indholdstype: applikation / javascript | Naturligvis er den korrekte MIME-medietype til JSON application / json, men det er nødvendigt at indse, hvilken type data der forventes i din applikation. For eksempel bruger jeg Ext GWT, og serverens svar skal gå som tekst / html, men indeholder JSON-data. Kundeside, Ext GWT form lytter uploadForm.getForm (). addListener (ny FormListenerAdapter () { @Override offentlig ugyldighed onActionFailed (formularformular, int httpStatus, strengresponstekst) { MessageBox.alert ("Fejl"); } @Override offentligt ugyldigt onActionComplete (Formular form, int httpStatus, String responseText) { MessageBox.alert ("Succes"); } }); I tilfælde af anvendelse af applikation / json-svarstype foreslår browseren mig at gemme filen. Kildekodestykke på serversiden ved hjælp af Spring MVC returner nyt AbstractUrlBasedView () { @SuppressWarnings ("ikke markeret") @Override beskyttet ugyldigt renderMergedOutputModel (kortmodel, HttpServletRequest anmodning, HttpServletResponse svar) kaster undtagelse { respons.setContentType ("tekst / html"); respons.getWriter (). skriv (json); } }; | JSON: Svar er dynamisk genererede data i henhold til de forespørgselsparametre, der sendes i URL'en. Eksempel: {"Navn": "Foo", "Id": 1234, "Rang": 7} Indholdstype: applikation / json JSON-P: JSON med polstring. Svaret er JSON-data med et funktionsopkald viklet rundt om det. Eksempel: functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7}); Indholdstype: applikation / javascript | Hvis du bruger Ubuntu eller Debian, og du serverer .json-filer via Apache, vil du muligvis servere filerne med den rigtige indholdstype. Jeg gør dette primært, fordi jeg vil bruge Firefox-udvidelsen JSONView Apache-modulet mod_mime hjælper med at gøre dette let. Men med Ubuntu skal du redigere filen /etc/mime.types og tilføje linjen ansøgning / json json Genstart derefter Apache: sudo service apache2 genstart | Hvis du ringer til ASP.NET Web Services fra klientsiden, skal du bruge application / json for at det fungerer. Jeg tror, det er det samme for jQuery og Ext-rammerne. | Den rigtige indholdstype til JSON er applikation / json, medmindre du bruger JSONP, også kendt som JSON med polstring, som faktisk er JavaScript, og så den rigtige indholdstype ville være applikation / javascript. | Der er ingen tvivl om, at applikation / json er den bedste MIME-type til et JSON-svar. Men jeg havde en vis erfaring, hvor jeg måtte bruge applikation / x-javascript på grund af nogle komprimeringsproblemer. Mit hostingmiljø er delt hosting med GoDaddy. De tillader mig ikke at ændre serverkonfigurationer. Jeg havde tilføjet følgende kode til min web.config-fil til komprimering af svar.Ved at bruge dette blev .aspx-siderne komprimeret med g-zip, men JSON-svar var ikke. Jeg tilføjede i sektionerne for statiske og dynamiske typer. Men dette komprimerer ikke JSON-svar overhovedet. Derefter fjernede jeg denne nyligt tilføjede type og tilføjede i både de statiske og dynamiske typer sektioner og ændrede svarstypen i .ashx (asynkron handler) til ansøgning / x-javascript Og nu fandt jeg ud af, at mine JSON-svar blev komprimeret med g-zip. Så jeg anbefaler personligt at bruge ansøgning / x-javascript kun hvis du vil komprimere dine JSON-svar på et delt hostingmiljø. Fordi i delt hosting tillader de dig ikke at ændre IISkonfigurationer. | Kun når jeg bruger application / json som MIME-typen, har jeg følgende (fra november 2011 med de nyeste versioner af Chrome, Firefox med Firebug): Ingen flere advarsler fra Chrome, når JSON indlæses fra serveren. Firebug tilføjer en fane til svaret, der viser dig JSON-dataene formateret. Hvis MIME-typen er forskellig, vises den bare som 'Svarindhold'. | Ikke alt fungerer til applikation af indholdstype / json. Hvis du bruger Ext JS-formular til at uploade fil, skal du være opmærksom på, at serversvaret parses af browseren for at oprette dokumentet til